package cn.huaqingcheng.tianshu.common.core.model;

import cn.huaqingcheng.tianshu.common.core.JsonTool;
import com.fasterxml.jackson.core.type.TypeReference;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.net.URI;

/**
 * CommonConvert
 */
@Mapper
public interface CommonConvert {

    CommonConvert INSTANCE = Mappers.getMapper(CommonConvert.class);


    @SuppressWarnings("unchecked")
    default <T> AttributeMap<T> toMap(String json) {
        if (json == null) {
            return new AttributeMap<>();
        }
        return JsonTool.parse(json, AttributeMap.class);
    }

    default String toJson(AttributeMap<?> map) {
        if (map == null) {
            return "{}";
        }
        return JsonTool.toJson(map);
    }

    default <E> JsonArray<E> toArray(String json) {
        if (json == null) {
            return new JsonArray<>();
        }
        return JsonTool.parseList(json, new TypeReference<>() {});
    }

    default String toJson(JsonArray<?> arr) {
        if (arr == null) {
            return "[]";
        }
        return JsonTool.toJson(arr);
    }

    default URI toUri(String s) {
        return s == null || s.isEmpty() ? null : URI.create(s);
    }

    default String toString(URI uri) {
        return uri == null ? null : uri.toString();
    }

}
